<?xml version="1.0" encoding="windows-1251"?>

<xsl:stylesheet
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="1.0">

    <xsl:key name="locations" match="//schedule/locations/location" use="@id"/>
    <xsl:key name="teachers" match="//schedule/teachers/teacher" use="@id"/>
    <xsl:key name="levels" match="//schedule/levels/level" use="@id"/>
    <xsl:key name="dances" match="//schedule/dances/dance" use="@id"/>
    <xsl:key name="msg" match="//schedule-messages/message" use="@id"/>

    <xsl:template match="group" mode="teachers">
        <xsl:call-template name="teachers">
            <xsl:with-param name="t1" select="@teacher1"/>
            <xsl:with-param name="t2" select="@teacher2"/>
        </xsl:call-template>
    </xsl:template>

    <xsl:template name="teachers">
        <xsl:param name="t1"/>
        <xsl:param name="t2"/>

        <xsl:if test="$t1">
            <xsl:call-template name="teacher">
                <xsl:with-param name="id" select="$t1"/>
            </xsl:call-template>
            <xsl:if test="$t2"><xsl:text> </xsl:text><xsl:value-of select="key('msg','and')"/><xsl:text> </xsl:text><xsl:call-template name="teacher">
                    <xsl:with-param name="id" select="$t2"/>
                </xsl:call-template>
            </xsl:if>
        </xsl:if>

    </xsl:template>

    <xsl:template match="group" mode="location">
        <xsl:choose><xsl:when test="@loc">
                <xsl:call-template name="location"><xsl:with-param name="id" select="@loc"/></xsl:call-template>
            </xsl:when>
            <xsl:otherwise><xsl:apply-templates select="." mode="locations-by-days"/></xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="group" mode="locations-by-days">
        <xsl:variable name="days" select="schedule"/>
        <xsl:if test="$days/@loc">
            <xsl:for-each select="../../locations/location[$days/@loc = @id]">
                <xsl:variable name="loc" select="@id"/>

                <u><xsl:for-each select="$days[@loc=$loc]">
                    <xsl:if test="position() > 1">, </xsl:if>
                    <xsl:call-template name="day"><xsl:with-param name="day" select="@day"/></xsl:call-template>
                </xsl:for-each></u>: <xsl:call-template name="location"><xsl:with-param name="id" select="$loc"/></xsl:call-template><br/>
            </xsl:for-each>
        </xsl:if>
    </xsl:template>


    <xsl:template name="check-map">
        <xsl:param name="id"/>
        <xsl:param name="map"/>
        <xsl:variable name="val" select="key($map,$id)"/>
        <xsl:if test="not($val)">
            <xsl:message terminate="yes">Invalid id (<xsl:value-of select="$id"/>) for map (<xsl:value-of select="$map"/>)</xsl:message>
        </xsl:if>
    </xsl:template>

    <xsl:template name="location">
        <xsl:param name="id"/>

        <xsl:variable name="map" select="'locations'"/>
        <xsl:call-template name="check-map">
            <xsl:with-param name="map" select="$map"/>
            <xsl:with-param name="id" select="$id"/>
        </xsl:call-template>

        <xsl:variable name="location" select="key($map,$id)"/>
        <xsl:if test="$location/metro">
            <b><xsl:value-of select="key('msg','metro-abr')"/><xsl:text> </xsl:text><xsl:value-of select="$location/metro"/></b>,
        </xsl:if>
        <xsl:value-of select="$location/address"/>
        <xsl:text> </xsl:text>
    </xsl:template>

    <xsl:template name="level">
        <xsl:param name="id"/>

        <xsl:variable name="map" select="'levels'"/>
        <xsl:call-template name="check-map">
            <xsl:with-param name="map" select="$map"/>
            <xsl:with-param name="id" select="$id"/>
        </xsl:call-template>

        <xsl:variable name="level" select="key($map,$id)"/>
        <xsl:value-of select="$level/@name"/>
        <!--<xsl:if test="$level/@url">
            <xsl:text> </xsl:text><small><a href="{$level/@url}">(?)</a></small>
        </xsl:if>-->
    </xsl:template>

    <xsl:template name="teacher">
        <xsl:param name="id"/>

        <xsl:variable name="map" select="'teachers'"/>
        <xsl:call-template name="check-map">
            <xsl:with-param name="map" select="$map"/>
            <xsl:with-param name="id" select="$id"/>
        </xsl:call-template>

        <xsl:variable name="teacher" select="key($map,$id)"/>
        <xsl:choose>
            <xsl:when test="$teacher/@url">
                <a href="{$teacher/@url}"><xsl:value-of select="$teacher/@name"/></a>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$teacher/@name"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template name="day">
        <xsl:param name="day"/>
        <xsl:value-of select="key('msg',concat('wd-',$day))"/>        
    </xsl:template>

    <xsl:template match="group" mode="dates">
        <xsl:if test="@started">
            <xsl:value-of select="key('msg','starting')"/><xsl:text> </xsl:text><xsl:call-template name="date">
            <xsl:with-param name="date" select="@started"/></xsl:call-template></xsl:if>
        <xsl:if test="@until"><xsl:text> </xsl:text><b><xsl:value-of select="key('msg','ending')"/><xsl:text> </xsl:text><xsl:call-template name="date"><xsl:with-param name="date" select="@until"/></xsl:call-template></b></xsl:if>
    </xsl:template>


    <xsl:template name="date">
        <xsl:param name="date"/>
        <!--<xsl:value-of select="$date"/>-->

        <xsl:variable name="year" select="substring-before($date,'-')"/>
        <xsl:variable name="day" select="number(substring-after(substring-after($date,'-'),'-'))"/>
        <xsl:variable name="mon" select="substring-before(substring-after($date,'-'),'-')"/>

        <xsl:value-of select="$day"/><xsl:text> </xsl:text>
            <xsl:value-of select="key('msg',concat('mon-',$mon))"/>
        <xsl:text> </xsl:text>
        <xsl:value-of select="$year"/>
    </xsl:template>

    <xsl:template name="dance">
        <xsl:param name="id"/>
        <xsl:variable name="dance" select="key('dances',$id)"/>

        <xsl:value-of select="$dance/@name"/>
                        <!--<xsl:if test="$dance/@url"><xsl:text> </xsl:text><small><a href="{$dance/@url}">(?)</a></small></xsl:if>-->
    </xsl:template>

    <xsl:template match="group" mode="days">
        <xsl:for-each select="schedule">
            <b><xsl:call-template name="day"><xsl:with-param name="day" select="@day"/></xsl:call-template></b>
                <xsl:text> </xsl:text><xsl:value-of select="@startTime"/><xsl:value-of select="@endTime"/><br/>
        </xsl:for-each>
    </xsl:template>

    <xsl:template name="gmaps-url">
        <xsl:param name="loc"/>
        <xsl:param name="city"/>http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=<xsl:value-of
            select="key('msg','lang')"/>&amp;geocode=&amp;q=<xsl:value-of
            select="$city"/>,<xsl:value-of select="key('locations',$loc)/address"/>&amp;z=16&amp;iwloc=addr</xsl:template>


    <xsl:template name="js-string">
        <xsl:param name="str"/>
        <xsl:variable name="res">
            <xsl:call-template name="replace-string">
                <xsl:with-param name="text" select="$str"/>
                <xsl:with-param name="replace">'</xsl:with-param>
                <xsl:with-param name="with">\'</xsl:with-param>
            </xsl:call-template>
        </xsl:variable>
        <xsl:value-of select="normalize-space($res)"/>
    </xsl:template>


    <xsl:template name="replace-string">
        <xsl:param name="text"/>
        <xsl:param name="replace"/>
        <xsl:param name="with"/>
        <xsl:choose>
          <xsl:when test="contains($text,$replace)">
            <xsl:value-of select="substring-before($text,$replace)"/>
            <xsl:value-of select="$with"/>
            <xsl:call-template name="replace-string">
              <xsl:with-param name="text" select="substring-after($text,$replace)"/>
              <xsl:with-param name="replace" select="$replace"/>
              <xsl:with-param name="with" select="$with"/>
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$text"/>
          </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

</xsl:stylesheet>